#ifndef __MYVECTOR_H_
#define __MYVECTOR_H_

#define ElementType void*
#define DEAULT_CAPACITY 4

//回调函数
//typedef void(*PrintCallBack)(DMArray* arr);
//typedef int(*FCallBack)(void *, void *);

typedef struct DynamicArray
{
  ElementType *dp;//存放数据的地址
  int size;//当前数据个数
  int capacity;//数组能容纳的最大元素个数
}DMArray;

//初始化,
void DMArray_Init(DMArray* arr);
//初始化,创建指针
DMArray* DMArray_Init_pointer();
//销毁
void DMArray_Destroy(DMArray* arr);
//打印
void DMArray_Travel(DMArray* arr, void(*PrintCallBack)(ElementType));
//尾插: num为插入数据的个数
void DMArray_PushBack(DMArray* arr, ElementType element);
//头插
void DMArray_PushFront(DMArray* arr, ElementType element);
//动态数组在index处插入数据element
void DMArray_InsertByIndex(DMArray* arr, int index, ElementType element);
//根据位置删除
void DMArray_RemoveByIndex(DMArray* arr, int index);
//根据值删除
void DMArray_RemoveByElement(DMArray* arr, ElementType element, int (*compare)(void* s1, void* s2));
//根据下标返回值
ElementType DMArray_FindByIndex(DMArray* arr, int index);
//查找值返回下标
int* DMArray_FindByElement(DMArray* arr, ElementType element, int (*compare)(void* s1, void* s2));
//清空数组
void DMArray_Clear(DMArray* arr);
//获取动态数组容量
int DMArray_GetCapacity(DMArray* arr);
//获取动态数组当前元素个数
int DMArray_GetSize(DMArray* arr);
//判断是否为空
int DMArray_IsEmpty(DMArray* arr);

//打印函数的具体实现
void DMArray_Print_int(ElementType data);


// int ArrayInit(DMArray *array);
// void FreeArray(DMArray *array);
// int InsertArray(DMArray*array,ElementType element);
#endif
